﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Domain.Core;
using Cesave.Domain.PermisosModule.Resources;

namespace Cesave.Domain.PermisosModule.Contracts.Comercializadoras
{
    public class ComercializadoraService
        : IComercializadoraService  
    {
        private IComercializadoraRepository _comercializadorarepository;

        public ComercializadoraService(IComercializadoraRepository comercializadorarepository)
        {
            _comercializadorarepository = comercializadorarepository;
        }

        public void AddComercializadora(Entities.Comercializadora comercializadora)
        {
            IUnitOfWork unitofwork = _comercializadorarepository.StoreContext;
            _comercializadorarepository.Add(comercializadora);
            try
            {
                unitofwork.Commit();
            }
            catch (Exception)
            {
                unitofwork.RollbackChanges();
                unitofwork.CommitAndRefreshChanges();
            }
        }

        public void ChangeComercializadora(Entities.Comercializadora comercializadora)
        {
            IUnitOfWork unitofwork = _comercializadorarepository.StoreContext;
            _comercializadorarepository.Modify(comercializadora);
            try
            {
                unitofwork.Commit();
            }
            catch (Exception)
            {
                unitofwork.RollbackChanges();
                unitofwork.CommitAndRefreshChanges();
            }
        }

        public List<Entities.Comercializadora> findComercializadorasByJunta(Guid juntaGuid)
        {
            ComercializadorasByJuntaSpecification specification = new ComercializadorasByJuntaSpecification(juntaGuid);
            return _comercializadorarepository.FindComercializadorasByJunta(specification).ToList();
        }

        public Entities.Comercializadora findComercializadoraByGuid(Guid comercializadoraGuid)
        {
            if (comercializadoraGuid == Guid.Empty)
                throw new ArgumentException(Messages.exception_InvalidArgument, "comercializadoraGuid");
            ComercializadoraByGuidSpecification specification = new ComercializadoraByGuidSpecification(comercializadoraGuid);
            return _comercializadorarepository.GetBySpec(specification).FirstOrDefault();
        }

        public void DeleteComercializadora(Entities.Comercializadora comercializadora)
        {
            if (comercializadora == null)
                throw new ArgumentNullException(Messages.exception_InvalidArgument, "comercializadora");
            IUnitOfWork unitofwork = _comercializadorarepository.StoreContext;
            _comercializadorarepository.Remove(comercializadora);
            try
            {
                unitofwork.Commit();
            }
            catch (Exception)
            {
                unitofwork.RollbackChanges();
                unitofwork.CommitAndRefreshChanges();
            }

        }

        public void Dispose()
        {
            if (_comercializadorarepository != null && _comercializadorarepository.StoreContext != null)
                _comercializadorarepository.StoreContext.Dispose();
        }
    }
}
